﻿#pragma once

#include <unordered_set>
#include <string>

using namespace std;

/**
 * 产生n个随机数字
 * @param minValue 随机数字的最小值
 * @param maxValue 随机数字的最大值
 * @param numbers 将这些随机数的首地址赋值给外面的指针变量
 * @param size 随机数字的个数
 * @param sorted 是否需要有序?
 */
void generateSomeRandomNumbers(const int minValue, const int maxValue, int** numbers, const size_t size, const bool sorted);

/**
 * 二分查找指定的数字
 * @param sortedNumbers 排好序的数组
 * @param size 数组大小
 * @param fromIndex 从哪个索引开始查找
 * @param toIndex 到哪个索引
 * @param target 要查找的数字
 * @return 指定数字在数组中的索引
 */
int binarySearchTarget(const int* sortedNumbers, const size_t size, const int fromIndex, const int toIndex, const int target);

/**
 * 二分查找小于等于指定数字而且最接近的索引
 */
int binarySearchNearestLessOrEqualThanTarget(const int* sortedNumbers, const size_t size, const int fromIndex, const int toIndex, const int target);

/**
 * 二分查找大于等于指定数字而且最接近的索引
 */
int binarySearchNearestMoreOrEqualThanTarget(const int* sortedNumbers, const size_t size, const int fromIndex, const int toIndex, const int target);

/**
 * 获取一个字符串所有字符的全排列
 * @param strSet 用于存放所有可能的字符串的HashSet容器
 */
void getFullPermutationOfCharacters(const char* str, unordered_set<string>& strSet);